#ifndef CARDS_H
#define CARDS_H

#include <QSet>
#include "card.h"

class Cards
{
public:
    // 排序的三种模式
    enum SortType { Asc, Desc, NoSort };
    Cards();
    explicit Cards(const Card& card);

    // 添加单张扑克牌
    void add(const Card& card);
    // 添加多张扑克牌
    void add(const Cards& cards);
    // 添加存储多张牌的容器
    void add(const QVector<Cards>& cards);

    // 一次性插入多个数据（重载<<）
    Cards& operator <<(const Card& card);
    Cards& operator <<(const Cards& cards);


    // 删除单张扑克牌
    void remove(const Card &card);
    // 删除多张扑克牌
    void remove(const Cards &cards);
    // 删除存储多张扑克牌
    void remove(const QVector<Cards>& cards);


    // 获取扑克牌的数量
    int cardCount() const;
    // 扑克牌是否为空
    bool isEmpty() const;
    // 清空扑克牌
    void clear();


    // 获取最大点数
    Card::CardPoint maxPoint();
    // 获取最小点数
    Card::CardPoint minPoint();
    // 指定点数的牌的数量
    int pointCount(Card::CardPoint point);
    // 某张牌是否在某个集合中
    bool contains(const Card& card) const;
    // 某张牌是否在某个集合中
    bool contains(const Cards& cards) const;
    // 随取出一张扑克牌
    Card takeRandomCard();

    // QSet -> QVector (将无序容器中的扑克牌转换为有效容器中的扑克牌) CardList = QVector<Card>;
    CardList toCardList(SortType type = Desc);



private:
    QList<Card> m_cards;
    // QSet<Card> m_cards; // 存储扑克牌数据的容器
};

#endif // CARDS_H
